package cn.com.dbappsecurity.controller;

import java.util.List;

import org.apache.commons.fileupload.FileItem;
import org.apache.ibatis.annotations.Param;

import cn.com.dbappsecurity.entity.Demo;
import cn.com.dbappsecurity.frame.annotations.Action;
import cn.com.dbappsecurity.frame.annotations.Auth;
import cn.com.dbappsecurity.frame.annotations.Controller;
import cn.com.dbappsecurity.frame.annotations.Log;
import cn.com.dbappsecurity.frame.annotations.Validate;
import cn.com.dbappsecurity.frame.datamodal.GridDataModal;
import cn.com.dbappsecurity.frame.datamodal.IDataModal;
import cn.com.dbappsecurity.service.IDemo;
import cn.com.dbappsecurity.service.impl.DemoImpl;
@Controller("demo")
public class DemoController extends BaseController{

	/*
	 * service实例获取
	 */
	private IDemo demoService = getService(DemoImpl.class);
	
	/**
	 * 插入数据
	 * @param name	参数名，对应前台提交来的参数名，也可以写成@Param("username")String name，则会使用username，
	 * 				GET及POST方式均不需要处理中文编码，框架会自动处理，可写的参数类型有Byte、Short、Integer、Long、
	 * 				Float、Double、Boolean、Character、FileItem、HttpServletRequest、HttpServletResponse、
	 * 				HttpSession、String及各自的数组表示方式，如Integer[]、String[]
	 * @param age
	 * @return	返回值为void或IDataModal的实例，根据前台对应的组件使用相应的实现类，如前台使用的是Grid，则用GridDataModal实现类;
	 * 			标准JSON格式则返回JsonDataModal实现类，实现类还包含TreeDataModal、FormDataModal等，还可以返回boolean、String，
	 * 			框架会自动封装成对应的实现类(JsonDataModal和PageDataModal)。
	 * @throws 无特殊需要，一般都不需要自己捕获处理异常，系统会自动根据异常类型响应相应的结果到前台并记录异常日志
	 */
	//Log注解表示让框架自动记录操作日志，操作类型为value对应的值,entry映射前台提交来的参数名称及值，不写entry则会交前台所有参数及值记录;
	@Log(value="插入demo记录",entry={"name=姓名","age=年龄"})
	//Action(value="insert")注解标识为前台调用的方法，未指定value则框架会使用方法名的中划线命名方式
	@Action
	//Auth注解让框架自动进行权限处理，权限动作为DEMO_ADD，不加则默认允许
	@Auth(value="DEMO_ADD")
	//@Validate指定参数验证方式
	public boolean insert(@Validate(minLen=1,maxLen=20,required=true,regex="")String name,int age) throws Exception{
		boolean success = demoService.insert(name, age);
		return success;
	}
	
	@Log(value="删除demo记录")
	@Action
	public boolean delete(int id) throws Exception{
		boolean success = demoService.delete(id);
		return success;
	}
	
	@Log(value="查询demo记录")
	@Action
	public IDataModal search(String name,int age,int page,int rows) throws Exception{
		int total = demoService.searchCount(name, age);
		List<Demo> data = null;
		if(total > 0){
			data = demoService.search(name, age, page, rows);
		}
		IDataModal modal = new GridDataModal(total, data);
		return modal;
	}
	
	/**
	 * 上传文件示例
	 * @param imgFile	FileItem为和传文件,allowType指定允许的扩展名,不指定表示不限制文件类型,
	 * @param txtFile
	 * @return
	 * @throws Exception
	 */
	@Action
	public boolean upload(@Validate(maxLen=1024*1024,required=true,allowType={"jpg","png"})@Param("img")FileItem imgFile,
			@Param("txt")FileItem txtFile) throws Exception{
		System.out.println("成功上传了文件："+imgFile.getName());
		System.out.println("成功上传了文件："+txtFile.getName());
		return true;
	}
	
}
